package com.ml.mall.service.mail;

import com.ml.mall.bean.vo.OrderDetailArrVO;
import com.ml.mall.model.MailMessage;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 邮件发送接口
 */
@Component
public interface MailService {

//ForAdmin
    /**
     * 卖家注册邮件给管理员
     * @param recipientEmail
     */
    MailMessage sendForSupplierRegistration(String recipientEmail);

    /**
     * 买家注册邮件给管理员
     * @param recipientEmail
     */
    MailMessage sendForPurchaserRegistration(String recipientEmail);

    /**
     * 合伙人加入邮件给管理员
     * @param recipientEmail
     */
    MailMessage sendForPartnerOnBoard(String recipientEmail);

    /**
     * 生成新订单邮件给管理员
     * @param recipientEmail
     */
    MailMessage sendForNewPurchaseOrder(String recipientEmail);

    /**
     * 供应商接收采购订单邮件给管理员
     * @param recipientEmail
     */
    MailMessage sendForSupplierAcceptPurchaseOrder(String recipientEmail);

    /**
     * 供应商拒绝采购订单邮件给管理员
     * @param recipientEmail
     */
    MailMessage sendForSupplierRejectPurchaseOrder(String recipientEmail);

    /**
     * 公司额度更改邮件给管理员
     * @param recipientEmail
     */
    MailMessage sendForCompanyCreditModified(String recipientEmail);

    /**
     * 上传新产品邮件给管理员
     * @param recipientEmail
     */
    MailMessage sendForNewProductUploaded(String recipientEmail);

//ForSupplier

    /**
     * 合伙人发起注册邀请邮件给卖家
     * @param recipientEmail
     */
    MailMessage sendForRegistrationInvitationFromPartner(String recipientEmail);

    /**
     * 卖家成功注册通知邮件给卖家
     * @param recipientEmail
     */
    MailMessage sendForRegisterSuccessfulEmail(String recipientEmail);

    /**
     * 账号被批准邮件给卖家
     * @param recipientEmail
     */
    MailMessage sendForAccountApproval(String recipientEmail);

    /**
     * 低库存量通知，系统发送 “低库存量通知” 邮件给卖家
     * @param recipientEmail
     */
    MailMessage sendForLowStockNotification(String recipientEmail);

    /**
     * 零库存通知，系统发送 “零库存通知” 邮件给卖家
     * @param recipientEmail
     */
    MailMessage sendForOutOfStockNotification(String recipientEmail);

    /**
     * 增加额度通知，公司通用
     * @param recipientEmail
     */
    MailMessage sendForCreditNotification(String recipientEmail);


    /**
     * 暂停公司通知，通用
     * @param recipientEmail
     */
    MailMessage sendForCompanySuspended(String recipientEmail);


    /**
     * 订单支付通知，系统发送 “订单支付通知” 邮件给买家
     * @param recipientEmail
     */
    MailMessage sendForPurchaseOrderPaymentMade(String recipientEmail);

    /**
     * 卖家更新订单状态，系统发送 “卖家更新订单状态” 邮件给买家
     * @param recipientEmail
     */
    MailMessage sendForDeliveryScheduleUpdatedByEachSupplier(String recipientEmail);

    /**
     * 订单完成，系统发送 “订单完成” 邮件给买家
     * @param recipientEmail
     */
    MailMessage sendForPurchaseOrderCompleted(String recipientEmail);

    /**
     * 优惠卷过期通知，系统发送 “优惠卷过期通知” 邮件给买家
     * @param recipientEmail
     */
    MailMessage sendForCouponExpirationReminder(String recipientEmail);


    /**
     * 用户邀请链接，系统发送 “用户邀请链接” 公司通用
     * @param recipientEmail
     */
    MailMessage sendForUserInvitationForCompany(String recipientEmail);




    /**
     * 合伙人邀请链接，系统发送 “合伙人邀请链接” 邮件给合作商
     * @param recipientEmail
     */
    MailMessage sendForPartnerInvitationLink(String recipientEmail);

    /**
     * 邀请的卖家账号被批准，系统发送 “邀请的卖家账号被批准” 邮件给合作商
     * @param recipientEmail
     */
    MailMessage sendForInvitedSupplierApproved(String recipientEmail);


//ForGeneral

    /**
     * 重置密码，系统发送 “重置密码” 邮件给买家
     * @param recipientEmail
     */
    MailMessage sendForResetPassword(String recipientEmail);

    /**
     * 注册获取验明证
     * @param verifyCode
     */
    MailMessage sendVerifyCode(String verifyCode,String to);

    //正式发送邮件
    /**
     * 重置密码，系统发送 “重置密码” 邮件给买家
     * @param mailMessage
     */
    void sendMail(MailMessage mailMessage);
}
